//
//  AddressModel.m
//  zhijianshejian
//
//  Created by admin on 16/7/16.
//  Copyright © 2016年 haoniu-duhuan. All rights reserved.
//

#import "AddressModel.h"


@implementation AddressModel

+ (instancetype)setDict:(NSDictionary *)dict
{
    AddressModel *pro = [[self alloc] init];
    [pro setValuesForKeysWithDictionary:dict];
    return pro;
}

-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
    NSLog(@"=========AddressModel类没有属性:%@,%@",value,key);
}

-(NSDictionary *)dictionaryWithModel{
    if (self == nil) {
        return nil;
    }
    
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    
    // 获取类名/根据类名获取类对象
    NSString *className = NSStringFromClass([self class]);
    id classObject = objc_getClass([className UTF8String]);
    
    // 获取所有属性
    unsigned int count = 0;
    objc_property_t *properties = class_copyPropertyList(classObject, &count);
    
    // 遍历所有属性
    for (int i = 0; i < count; i++) {
        // 取得属性
        objc_property_t property = properties[i];
        // 取得属性名
        NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property)
                                                          encoding:NSUTF8StringEncoding];
        // 取得属性值
        id propertyValue = nil;
        id valueObject = [self valueForKey:propertyName];
        
        if ([valueObject isKindOfClass:[NSDictionary class]]) {
            propertyValue = [NSDictionary dictionaryWithDictionary:valueObject];
        } else if ([valueObject isKindOfClass:[NSArray class]]) {
            propertyValue = [NSArray arrayWithArray:valueObject];
        } else {
            if ([self valueForKey:propertyName]==nil) {
                propertyValue = @"";
            }else{
                propertyValue = [NSString stringWithFormat:@"%@", [self valueForKey:propertyName]];
            }
        }
        
        [dict setObject:propertyValue forKey:propertyName];
    }
    return [dict copy];
}

-(NSString *)description{
    if (self == nil) {
        return nil;
    }
    
    NSMutableString *desc = [[NSMutableString alloc] init];
    
    // 获取类名/根据类名获取类对象
    NSString *className = NSStringFromClass([self class]);
    id classObject = objc_getClass([className UTF8String]);
    
    // 获取所有属性
    unsigned int count = 0;
    objc_property_t *properties = class_copyPropertyList(classObject, &count);
    
    // 遍历所有属性
    for (int i = 0; i < count; i++) {
        // 取得属性
        objc_property_t property = properties[i];
        // 取得属性名
        NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property)
                                                          encoding:NSUTF8StringEncoding];
        // 取得属性值
        id propertyValue = nil;
        id valueObject = [self valueForKey:propertyName];
        
        if ([valueObject isKindOfClass:[NSDictionary class]]) {
            propertyValue = [NSDictionary dictionaryWithDictionary:valueObject];
        } else if ([valueObject isKindOfClass:[NSArray class]]) {
            propertyValue = [NSArray arrayWithArray:valueObject];
        } else {
            if ([self valueForKey:propertyName]==nil) {
                propertyValue = @"";
            }else{
                propertyValue = [NSString stringWithFormat:@"%@", [self valueForKey:propertyName]];
            }
        }
        [desc appendFormat:@"%@:%@, ",propertyName,propertyValue];
    }
    return desc;
}

@end
